package part10volatile;

/*
 * 验证volatile不具备原子性
 * */
public class VolatileTest02 {

    private volatile static int num = 0;

    public static void add() {
        num++;
    }

    // 结果应该是 num 为 2万，测试看结果
    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i <= 20; i++) {
            new Thread(() -> {
                for (int j = 1; j <= 1000; j++) {
                    add();
                }
            }, String.valueOf(i)).start();
        }

        // 需要等待上面20个线程都全部计算完毕，看最终结果
        while (Thread.activeCount() > 2) { // 默认一个 main线程 一个 gc 线程
            Thread.yield();
        }

        System.out.println(Thread.currentThread().getName() + " " + num);
    }

}
